<?php
/**
 * 模型配置管理类
 *
 * @package DeepSeekAISummarizer
 * @since 3.7.2
 */

// 防止直接访问
if (!defined('ABSPATH')) {
    exit;
}

// 防止重复声明类
if (!class_exists('DeepSeekAI_Models_Config')) {

class DeepSeekAI_Models_Config {
    
    /**
     * 模型配置数据
     */
    private $config = null;
    
    /**
     * 单例实例
     */
    private static $instance = null;
    
    /**
     * 获取单例实例
     */
    public static function get_instance() {
        if (null === self::$instance) {
            self::$instance = new self();
        }
        return self::$instance;
    }
    
    /**
     * 构造函数
     */
    private function __construct() {
        $this->load_config();
    }
    
    /**
     * 加载模型配置
     */
    private function load_config() {
        $config_file = DEEPSEEK_AI_PLUGIN_PATH . 'includes/models-config.json';
        
        if (file_exists($config_file)) {
            $json_content = file_get_contents($config_file);
            $this->config = json_decode($json_content, true);
            
            if (json_last_error() !== JSON_ERROR_NONE) {
                // 配置文件解析错误
                error_log('爱奇吉摘要: 模型配置文件解析错误 - ' . json_last_error_msg());
                $this->config = $this->get_default_config();
            }
        } else {
            // 配置文件不存在
            error_log('爱奇吉摘要: 模型配置文件不存在，使用默认配置');
            $this->config = $this->get_default_config();
        }
    }
    
    /**
     * 获取默认配置（当配置文件不存在或解析错误时使用）
     */
    private function get_default_config() {
        return array(
            'providers' => array(
                array(
                    'id' => 'zhipu',
                    'name' => '智谱清言 GLM-4',
                    'description' => '智谱清言提供的大语言模型',
                    'is_recommended' => true,
                    'default_api_option' => 'zhipu_ai_api_key',
                    'api_url' => 'https://open.bigmodel.cn/api/paas/v4/chat/completions',
                    'models' => array(
                        array(
                            'id' => 'glm-4-flash-250414',
                            'name' => 'glm-4-flash-250414',
                            'description' => '免费推荐',
                            'is_free' => true,
                            'is_default' => true
                        )
                    ),
                    'default_max_tokens' => 500,
                    'default_temperature' => 0.75,
                    'max_allowed_tokens' => 8000
                ),
                array(
                    'id' => 'volcengine',
                    'name' => '火山方舟（豆包）',
                    'description' => '字节跳动旗下的火山方舟（豆包）大语言模型',
                    'is_recommended' => false,
                    'default_api_option' => 'volcengine_ai_api_key',
                    'api_url' => 'https://ark.cn-beijing.volces.com/api/v3/chat/completions',
                    'models' => array(
                        array(
                            'id' => 'Doubao-lite-4k',
                            'name' => 'Doubao-lite-4k',
                            'description' => '免费',
                            'is_free' => true,
                            'is_default' => true
                        )
                    ),
                    'default_max_tokens' => 500,
                    'default_temperature' => 0.7,
                    'max_allowed_tokens' => 4000
                ),
                array(
                    'id' => 'deepseek',
                    'name' => 'DeepSeek',
                    'description' => 'DeepSeek AI提供的大语言模型',
                    'is_recommended' => false,
                    'default_api_option' => 'deepseek_ai_api_key',
                    'api_url' => 'https://api.deepseek.com/chat/completions',
                    'models' => array(
                        array(
                            'id' => 'deepseek-chat',
                            'name' => 'deepseek-chat',
                            'description' => '',
                            'is_free' => false,
                            'is_default' => true
                        )
                    ),
                    'default_max_tokens' => 500,
                    'default_temperature' => 0.7,
                    'max_allowed_tokens' => 2000
                )
            )
        );
    }
    
    /**
     * 获取所有服务提供商
     */
    public function get_providers() {
        return isset($this->config['providers']) ? $this->config['providers'] : array();
    }
    
    /**
     * 获取指定ID的服务提供商
     */
    public function get_provider($provider_id) {
        foreach ($this->get_providers() as $provider) {
            if ($provider['id'] === $provider_id) {
                return $provider;
            }
        }
        return null;
    }
    
    /**
     * 获取推荐的服务提供商
     */
    public function get_recommended_provider() {
        foreach ($this->get_providers() as $provider) {
            if (isset($provider['is_recommended']) && $provider['is_recommended']) {
                return $provider;
            }
        }
        
        // 如果没有标记为推荐的提供商，返回第一个
        $providers = $this->get_providers();
        return !empty($providers) ? $providers[0] : null;
    }
    
    /**
     * 获取指定提供商的所有模型
     */
    public function get_provider_models($provider_id) {
        $provider = $this->get_provider($provider_id);
        return $provider && isset($provider['models']) ? $provider['models'] : array();
    }
    
    /**
     * 获取指定提供商的默认模型
     */
    public function get_provider_default_model($provider_id) {
        $models = $this->get_provider_models($provider_id);
        
        foreach ($models as $model) {
            if (isset($model['is_default']) && $model['is_default']) {
                return $model;
            }
        }
        
        // 如果没有标记为默认的模型，返回第一个
        return !empty($models) ? $models[0] : null;
    }
    
    /**
     * 获取指定提供商的API URL
     */
    public function get_provider_api_url($provider_id) {
        $provider = $this->get_provider($provider_id);
        return $provider && isset($provider['api_url']) ? $provider['api_url'] : '';
    }
    
    /**
     * 获取指定提供商的默认最大Token数
     */
    public function get_provider_default_max_tokens($provider_id) {
        $provider = $this->get_provider($provider_id);
        return $provider && isset($provider['default_max_tokens']) ? $provider['default_max_tokens'] : 500;
    }
    
    /**
     * 获取指定提供商的默认温度
     */
    public function get_provider_default_temperature($provider_id) {
        $provider = $this->get_provider($provider_id);
        return $provider && isset($provider['default_temperature']) ? $provider['default_temperature'] : 0.7;
    }
    
    /**
     * 获取指定提供商的最大允许Token数
     */
    public function get_provider_max_allowed_tokens($provider_id) {
        $provider = $this->get_provider($provider_id);
        return $provider && isset($provider['max_allowed_tokens']) ? $provider['max_allowed_tokens'] : 2000;
    }
}

} 